with Ada.Calendar;
private with Ada.Finalization;
package Performances is

   type Monitor_Type is tagged limited private;

   procedure Reset (this : in out Monitor_Type);

   procedure Start (this : in out Monitor_Type);

   procedure Stop (this : in out Monitor_Type);

   function Consumed (this : in out Monitor_Type) return Duration;

   function Average (this : in out Monitor_Type) return Duration;

   function Count (this : in out Monitor_Type) return Natural;

   type Monitor_Pointer is access all Monitor_Type'Class;

private


   type Monitor_Type is new Ada.Finalization.Limited_Controlled with record
      Start_Time, Stop_Time : Ada.Calendar.Time;
      Consumed_Time : Duration;
      Sample_Count : Natural;
   end record;

   overriding 
   procedure Initialize (this : in out Monitor_Type);

end Performances;
